package com.jd.controller;

import java.util.UUID;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.jd.pojo.Users;
import com.jd.pojo.vo.UsersVO;
import com.jd.service.UserService;
import com.jd.utils.IMoocJSONResult;
import com.jd.utils.MD5Utils;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;

@RestController
@Api(value = "用户注册登录的接口", tags = { "注册和登录的controller" })
public class RegistLoginController extends BasicController {

	@Autowired
	private UserService userService;

	@ApiOperation(value = "用户注册", notes = "用户注册的接口")
	@PostMapping("/regist")
	public IMoocJSONResult regist(@RequestBody Users user) throws Exception {

		// 1. 判断用户名和密码必须不为空
		if (StringUtils.isBlank(user.getUsername()) || StringUtils.isBlank(user.getPassword())) {
			return IMoocJSONResult.errorMsg("用户名和密码不能为空");
		}

		// 2. 判断用户名是否存在
		boolean usernameIsExist = userService.queryUsernameIsExist(user.getUsername());

		// 3. 保存用户，注册信息
		if (!usernameIsExist) {
			user.setNickname(user.getUsername());
			user.setPassword(MD5Utils.getMD5Str(user.getPassword()));
			user.setFansCounts(0);
			user.setReceiveLikeCounts(0);
			user.setFollowCounts(0);
			userService.saveUser(user);
		} else {
			return IMoocJSONResult.errorMsg("用户名已经存在，请换一个再试");
		}

		UsersVO usersVO = setUserRedisSession(user);

		return IMoocJSONResult.ok(usersVO);
	}

	public UsersVO setUserRedisSession(Users user) {
		String uuidToken = UUID.randomUUID().toString();
		redis.set(USER_REDIS_SESSION + ":" + user.getId(), uuidToken, 1000 * 60 * 30);

		UsersVO usersVO = new UsersVO();
		BeanUtils.copyProperties(user, usersVO);
		usersVO.setUserToken(uuidToken);
		return usersVO;

	}

	@ApiOperation(value = "用户登录", notes = "用户登录接口")
	@PostMapping("/login")
	public IMoocJSONResult login(@RequestBody Users user) throws Exception {
		String username = user.getUsername();
		String password = user.getPassword();

		if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
			return IMoocJSONResult.ok("用户名或密码不能为空！");

		}

		Users userResult = userService.queryUserForLogin(username, MD5Utils.getMD5Str(password));

		if (userResult != null) {
			userResult.setPassword("");
			UsersVO usersVO = setUserRedisSession(userResult);
			return IMoocJSONResult.ok(usersVO);
		} else {
			return IMoocJSONResult.errorMsg("用户名或密码不正确");
		}

	}

	@ApiOperation(value = "用户注销", notes = "用户注销")
	@ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "String")
	@PostMapping("/logout")
	public IMoocJSONResult logout(String userId) throws Exception {
		redis.del(USER_REDIS_SESSION + ":" + userId);
		return IMoocJSONResult.ok();

	}


}
